package com.ruoyi.common.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
import java.util.TreeMap;
import java.util.UUID;

public class WxPayUtils { // 类名可自定义（如保留s，但方法签名需匹配）

    /**
     * 生成 MD5 签名（2 个参数：参数Map、商户密钥）
     */
    public static String generateSignature(Map<String, String> data, String key) {
        TreeMap<String, String> sortedData = new TreeMap<>(data);
        StringBuilder paramStr = new StringBuilder();
        for (Map.Entry<String, String> entry : sortedData.entrySet()) {
            String value = entry.getValue();
            if (value != null && !value.trim().isEmpty()) {
                paramStr.append(entry.getKey()).append("=").append(value).append("&");
            }
        }
        paramStr.append("key=").append(key);

        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] hash = md.digest(paramStr.toString().getBytes());
            StringBuilder hexString = new StringBuilder();
            for (byte b : hash) {
                String hex = Integer.toHexString(0xFF & b);
                if (hex.length() == 1) {
                    hexString.append('0');
                }
                hexString.append(hex);
            }
            return hexString.toString().toUpperCase();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("MD5算法不存在", e);
        }
    }

    /**
     * 生成随机字符串（nonce_str）
     */
    public static String generateNonceStr() {
        return UUID.randomUUID().toString().replace("-", "");
    }
}